package com.fdb.efp.nls.service.impl;

import com.fdb.basic.framework.core.base.FrameworkService;
import com.fdb.efp.nls.service.dao.SDeptDao;
import com.fdb.efp.nls.service.domain.SDept;
import com.fdb.efp.nls.service.facade.SDeptService;
import com.fdb.efp.nls.service.vo.SDeptVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Objects;

/**
 * <p>ServiceImpl: 部门管理表				<p>
 * @author taoyong
 * @date 2018-05-30
 */
@Service("sDeptService")
public class SDeptServiceImpl implements SDeptService, FrameworkService {
	
	private static Logger logger = LoggerFactory.getLogger(SDeptServiceImpl.class);

	@Autowired
	private SDeptDao sDeptDao;
	
	/**
	 * 新增操作
	 */
	public int insertSDept(SDeptVO inSDeptVo) {
		logger.debug("当前新增数据为:"+ inSDeptVo.toString());
		int num = 0;
		try {
			SDept sDept = new SDept();
			beanCopy(inSDeptVo, sDept);
			num = sDeptDao.insertSDept(sDept);
		} catch (Exception e) {
			logger.error("新增数据发生异常!", e);
			num = -1;
		}
		logger.debug("当前新增数据条数为:"+ num);
		return num;
	}

	/**
	 * 删除操作
	 */
	public int deleteByPk(SDeptVO inSDeptVo) {
		logger.debug("当前删除数据条件为:"+ inSDeptVo);
		int num = 0;
		try {
			SDept sDept = new SDept();
			beanCopy(inSDeptVo, sDept);
			num = sDeptDao.deleteByPk(sDept);
		} catch (Exception e) {
			logger.error("删除数据发生异常!", e);
			num = -1;
		}
		logger.debug("根据条件:"+ inSDeptVo +"删除的数据条数为"+ num);
		return num;
	}


	/**
	 * 更新操作
	 */
	public int updateByPk(SDeptVO inSDeptVo) {
		logger.debug("当前修改数据为:"+ inSDeptVo.toString());
		int num = 0;
		try {
			SDept sDept = new SDept();
			beanCopy(inSDeptVo, sDept);
			num = sDeptDao.updateByPk(sDept);
		} catch (Exception e) {
			logger.error("修改数据发生异常!", e);
			num = -1;
		}
		logger.debug("根据条件:"+ inSDeptVo +"修改的数据条数为"+ num);
		return num;
	}
	
	/**
	 * 查询操作
	 */
	public SDeptVO queryByPk(SDeptVO inSDeptVo) {
		
		logger.debug("当前查询参数信息为:"+ inSDeptVo);
		try {
			SDept querySDept = new SDept();
			beanCopy(inSDeptVo, querySDept);
			SDept queryRslSDept = sDeptDao.queryByPk(querySDept);
			if (Objects.nonNull(queryRslSDept)) {
				SDeptVO outSDeptVo = beanCopy(queryRslSDept, new SDeptVO());
				logger.debug("当前查询结果为:"+ outSDeptVo.toString());
				return outSDeptVo;
			} else {
				logger.debug("当前查询结果为空!");
			}
		} catch (Exception e) {
			logger.error("查询数据发生异常!", e);
		}
		return null;
	}


	/**
	 * 查询用户权限数据
	 */
	@SuppressWarnings("unchecked")
	public List<SDeptVO> queryAllOwner(SDeptVO sDeptVo) {

		logger.debug("当前查询本人所属数据信息的参数信息为:");
		List<SDeptVO> list = null;
		try {
			List<SDept> sDepts = sDeptDao.queryAllOwnerByPage(sDeptVo);
			logger.debug("当前查询本人所属数据信息的结果集数量为:"+ sDepts.size());
			pageSet(sDepts, sDeptVo);
			list = (List<SDeptVO>) beansCopy(sDepts, SDeptVO.class);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}
		
		return list;
	
	}


	/**
	 * 查询当前机构权限数据
	 */
	@SuppressWarnings("unchecked")
	public List<SDeptVO> queryAllCurrOrg(SDeptVO sDeptVo) {

		logger.debug("当前查询本人所属机构数据信息的参数信息为:");
		List<SDept> sDepts = sDeptDao.queryAllCurrOrgByPage(sDeptVo);
		logger.debug("当前查询本人所属机构数据信息的结果集数量为:"+sDepts.size());
		List<SDeptVO> list = null;
		try {
			pageSet(sDepts, sDeptVo);
			list = (List<SDeptVO>) beansCopy(sDepts, SDeptVO.class);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}
		
		return list;
	
	}


	/**
	 * 查询当前机构及下属机构权限数据
	 */
	@SuppressWarnings("unchecked")
	public List<SDeptVO> queryAllCurrDownOrg(SDeptVO sDeptVo) {

		logger.debug("当前查询本人所属机构及以下数据信息的参数信息为:");
		List<SDept> sDepts = sDeptDao.queryAllCurrDownOrgByPage(sDeptVo);
		logger.debug("当前查询本人所属机构及以下数据信息的结果集数量为:"+ sDepts.size());
		List<SDeptVO> list = null;
		try {
			pageSet(sDepts, sDeptVo);
			list = (List<SDeptVO>) beansCopy(sDepts, SDeptVO.class);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}
		
		return list;
	
	}

	/**
	 * 增加部门时候设置状态为1生效的方法
	 * @param inSDeptVo
	 * @return
	 */
	public int insertDeptTemp(SDeptVO inSDeptVo) {
		logger.debug("直接增加部门的参数信息为："+inSDeptVo);
		int num  = 0;
		try {
			SDept sdept = new SDept();
			beanCopy(inSDeptVo, sdept);
			num = sDeptDao.insertDeptTemp(sdept);
		}catch(Exception e) {
			logger.debug("添加部门信息出错："+e);
			num = -1;
		}
		logger.debug("当前新增数据条数为:"+ num);
		return num;
	}

	/**
	 * 将部门状态待生效0该为生效状态1的方法
	 * @param inSDeptVo
	 * @return
	 */
	public int updateDeptTemp(SDeptVO inSDeptVo) {
		logger.debug("修改部门信息的参数信息为："+inSDeptVo);
		int num  = 0;
		try {
			SDept sdept = new SDept();
			beanCopy(inSDeptVo, sdept);
			num = sDeptDao.updateDeptTemp(sdept);
		}catch(Exception e) {
			logger.debug("修改部门信息出错："+e);
			num = -1;
		}
		logger.debug("当前修改数据条数为:"+ num);
		return num;
	}

	/**
	 * 使部门失效的方法（将生效状态1改成失效2）
	 * @param inSDeptVo
	 * @return
	 */
	public int disableDeptTemp(SDeptVO inSDeptVo) {
		logger.debug("部门失效的编号是："+inSDeptVo.getDepno());
		int num  = 0;
		try {
			num = sDeptDao.disableDeptTemp(inSDeptVo);
		}catch(Exception e) {
			logger.debug("数据信息转换出错:"+ e);
			 num = -1;
		}
		logger.debug("当前失效部门数据条数为:"+ num);
		return num;
	}
	
	
	
}